相比于 ES6 的重大变革,ES7 只引进了两个主要新特性和一些小的改进。
一、 数组 includes() 方法
Array.prototype.includes() 用于判断数组是否包含某个指定的元素,返回布尔值 (true/false ),解决了传统的 indexOf() 的局限性
array.includes(valueToFind, fromIndex)valueToFind:要查找的元素fromIndex:开始查找的下表,默认值为 0
- 与
indexOf()的区别indexOf()返回元素的索引,includes()直接返回布尔值,在仅简单判定数组中是否包含某元素下语义更清晰includes()能正确识别NaN(而indexOf()对NaN会返回 -1,因为NaN !== NaN)includes()对+0和-0视为相等
二、 指数运算符(exponentiation operator)
引入 ** 运算符,用于实现幂运算,代替传统的 Math.pow() 方法,语法更简单。
语法为:基数 ** 指数
console.log(2 ** 3); // 8
console.log(2 ** 3); // 8
console.log(2 ** 3); // 8
console.log(2 ** 3); // 8
console.log(2 ** (3 ** 2)); // 512(Javascript 的计算是从右到左)
let a = 2;
a **= 3;
console.log(a); // 8
- 与
Math.pow(基数, 指数)功能一致,但写法更简单 - 支持结合律:
a ** b ** c等价于a ** (b ** c) - 支持赋值运算符结合:
**=
三、 其他
ES2016 还包含一些对规范的细微调整和澄清,主要面向 JavaScript 引擎的实现者,对开发者影响较小:
- 对
Function.prototype.toString()进行了标准化,要求返回函数的完成源码(包括注释和空格) - 对
Array.prototype.sort()的稳定性进行了规范(不同的引擎实现区域一致) - 修正了一些边远情况的语法和语义的定义